package dataTypes;

import java.io.Serializable;

/**
 * A sudoku game.
 * 
 * @author Felix Schliephacke
 * 
 */
public interface Sudoku<T> extends Cloneable, Serializable {

	Sudoku<T> clone();

	Field<T>[] getColumn(int column) throws IllegalArgumentException;

	Field<T> getField(int row, int column) throws IllegalArgumentException;

	Field<T> getPossibleContent();

	Field<T>[] getRow(int row) throws IllegalArgumentException;

	int getSize();

	Field<T>[] getSquare(int index) throws IllegalArgumentException;

	int getSquareSize();

	boolean isSolvable();

	boolean isSolved();

	boolean removeFromContext(int row, int column, T toRemove);

	boolean removeFromField(int row, int column, T arg)
			throws IllegalArgumentException;

	void reset();

	void resetColumn(int column) throws IllegalArgumentException;

	void resetField(int row, int column) throws IllegalArgumentException;

	void resetRow(int row) throws IllegalArgumentException;

	void resetSquare(int square);

	void setField(int row, int column, T content);
}
